Esto puede parecer una pregunta tonta. pero por favor guíame.
https://apidock.com/ruby/Thread/join
a = Thread.new { print "a"; } a.join(5) Como vemos aquí, el método #join es básicamente, "Oye OS, ejecuta este bloque de código (subproceso), dentro de 5 segundos".
pero ¿de dónde viene este nombre? join ¿Por qué no simplemente run ?
en Java, parece un significado ligeramente diferente.
Descubrí que en realidad #join está bloqueando la llamada. Significa que comprueba 5 segundos después, si el hilo se ha terminado o no. Si finished , mata el hilo. (X) . join devolverá el objeto Thread. que ya está Muerto.
No exactamente. join es el nombre tradicional de la operación que espera a que se complete un subproceso. La ejecución se "divide" cuando inicia un hilo y se "une" cuando un padre se da cuenta de la finalización de un hilo.
a.join(5) no dice "ejecutar este hilo dentro de 5 segundos", dice "esperar hasta 5 segundos para que termine este hilo". Comienza a ejecutarse tan pronto como lo crea.
Thread.new inicia el hilo. Puedes hacer una prueba sencilla:
Thread.new { puts "started" }; sleep 1 puts "done" La impresión started de inmediato, luego esperará un segundo y luego done imprimirá.
O ejecute Thread.new en irb y vea cómo se ejecuta inmediatamente.
Necesita a.join porque sin él, el programa principal podría salir y eliminar los subprocesos antes de que se complete el subproceso. Por ejemplo...
Thread.new do puts "start" # Simulate the thread doing some work sleep 1 puts "end" end sleep 0.5 Esto imprimirá el start y eso es todo. El programa principal terminará y matará el hilo. El proceso principal debe esperar hasta que el subproceso se complete conjoin .
Se llama "unirse" porque está uniendo el hilo nuevamente con el hilo principal que lo generó.